`timescale 1ns / 1ps
/*--------------------------------------------------------------------*\
FileName        : cbb_fpgapwm.v
Author          ：hpy
Email           ：yuan_hp@qq.com
Date            ：2024年04月28日
Description     ：FPGA产生PWM模块

cbb_fpgapwm  #(
    .NW (32)   // 数据位宽
) u_cbb_fpgapwm (
    .clk( clk ),
    .rst_n( rst_n ),
    .i_arr( arr), // Automatic Reload  , 决定PWM的细分度和周期
    .i_ccr( ccr), //Catch Compare Register    决定占空比

    .o_pwm( pwm )    // 输出的pwm
);

\*--------------------------------------------------------------------*/
module cbb_fpgapwm #(
    parameter NW = 32   // 数据位宽
)(
    input clk,
    input rst_n,
    input [NW-1:0]  i_arr, // Automatic Reload  , 决定PWM的细分度和周期
    input [NW-1:0]  i_ccr , //Catch Compare Register    决定占空比

    output o_pwm    // 输出的pwm
);

/* -------------------- param --------------------- */

/*---------------------- reg ---------------------- */
reg [NW-1:0]  cnt ; 
/*----------------------- wire ---------------------*/

/*--------------------- assign ---------------------*/
assign  o_pwm = ((cnt <= i_ccr) & (|i_ccr))  ? 1'b1 : 1'b0 ; 
/*---------------------- blk -----------------------*/


always @(posedge clk ) begin
    if(!rst_n)begin
        cnt <= {NW{1'b0}} ;
    end else begin
        cnt <= cnt < i_arr ? cnt + 1'b1 : {NW{1'b0}} ;
    end
end


endmodule

